// @flow
// Copyright (c) 2019 Uber Technologies, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
// in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under
// the License.

import Span from '../span';
import type { SamplerApiVersion } from '../samplers/constants';

/**
 * Sampler methods return SamplingDecision struct.
 */
declare type SamplingDecision = {
  sample: boolean,
  retryable: boolean,
  tags: ?{},
};

declare interface Sampler {
  apiVersion: SamplerApiVersion;

  onCreateSpan(span: Span): SamplingDecision;
  onSetOperationName(span: Span, operationName: string): SamplingDecision;
  onSetTag(span: Span, key: string, value: any): SamplingDecision;

  close(callback: ?() => void): void;
}
